popover: dispose popovers when unmanaging them
authorCarlos Garnacho <carlosg@gnome.org>
Thu, 6 Mar 2014 17:59:40 +0000 (18:59 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Thu, 6 Mar 2014 18:34:06 +0000 (19:34 +0100)
This makes popovers get rid of dangling pointers at the time of destroying
the relative-to widget, just in case these are kept alive by a reference.

gtk/gtkpopover.c

index 7cadf982def852d0b955b1693b414b397017ac54..8e1c56b0644ff162ff7ff545da9a78c97431d85f 100644 (file)
@@ -1383,6 +1383,13 @@ _gtk_popover_parent_size_allocate (GtkWidget     *widget,
   gtk_popover_update_position (popover);
 }
 
+static void
+_unmanage_popover (GObject *object)
+{
+  g_object_run_dispose (object);
+  g_object_unref (object);
+}
+
 static void
 widget_manage_popover (GtkWidget  *widget,
                        GtkPopover *popover)
@@ -1394,7 +1401,7 @@ widget_manage_popover (GtkWidget  *widget,
   if (G_UNLIKELY (!popovers))
     {
       popovers = g_hash_table_new_full (NULL, NULL,
-                                        (GDestroyNotify) g_object_unref, NULL);
+                                        (GDestroyNotify) _unmanage_popover, NULL);
       g_object_set_qdata_full (G_OBJECT (widget),
                                quark_widget_popovers, popovers,
                                (GDestroyNotify) g_hash_table_unref);